# keyword-only参数：在形参定义时，在一个*星号之后，或一个可变位置参数之后，出现的普通参数，
# 就已经不是普通的参数了，称为keyword-only参数。
def fn(*args, x):
    print(x, args, sep='\n', end='\n\n')

#什么是LEGB，请解释

"""
变量名解析原则LEGB***
Local，本地作用域、局部作用域的local命名空间。函数调用时创建，调用结束消亡
Enclosing，Python2.2时引入了嵌套函数，实现了闭包，这个就是嵌套函数的外部函数的命名空间
Global，全局作用域，即一个模块的命名空间。模块被import时创建，解释器退出时消亡
Build-in，内置模块的命名空间，生命周期从python解释器启动时创建到解释器退出时消亡。例如
print(open)，print和open都是内置的变量
所以一个名词的查找顺序就是LEGB
"""


def calculator():
    while True:
        try:
            num1 = float(input("请输入第一个数字: "))
            operator = input("请输入操作符 (+ - * /): ")
            num2 = float(input("请输入第二个数字: "))

            if operator == '+':
                result = num1 + num2
            elif operator == '-':
                result = num1 - num2
            elif operator == '*':
                result = num1 * num2
            elif operator == '/':
                result = num1 / num2
            else:
                print("无效的操作符！")
                continue

            print("计算结果:", result)

            choice = input("是否继续计算？(Y/N): ")
            if choice.lower() != 'y':
                break

        except ValueError:
            print("输入无效的数字！请重新输入。")
        except ZeroDivisionError:
            print("除数不能为零！请重新输入。")

calculator()